package dominio.neuronio;

import java.util.List;

import dominio.ativacao.FuncaoAtivacao;
import dominio.padrao.Padrao;

/**
 * @author Paulo Vitor
 * @author Roberto Su
 * 
 * @description
 *
 *
 */
public interface Neuronio {
	
	/**
	 * Método que estimula um neuronio com um padrao de entradas,
	 * processa esses estimulos e retorna um determinado valor saida.
	 * 
	 * @param padrao
	 * @return
	 */
	double estimular( Padrao padrao );
	
	/**
	 * Método que define o tipo de função de ativação que o 
	 * neuronio utilizará.
	 * 
	 * @param funcaoAtivacao
	 */
	void definirFuncaoAtivacao(FuncaoAtivacao funcaoAtivacao);
	
	/**
	 * Método que a partir de um padrao de entradas cria
	 * as sinapses do neuronio.
	 * 
	 * @param estimulos
	 */
	void criarSinapses(Padrao padrao);
	
	/**
	 * Método que a partir de um padrao de entradas cria
	 * as sinapses do neuronio com os pesos previamente definidos.
	 * 
	 * @param estimulos
	 * @param w
	 */
	void criarSinapses(Padrao padrao, double[] w);
	
	/**
	 * Método que retorna a coleção de sinapses do neurônio
	 * 
	 * @return
	 */
	List<Sinapse> getSinapses();
	
}
